#include <REGX52.H>
#include "Delayxms.h"

/**
  * @brief 检测矩阵按键的按下,返回1-16数字,分别对应S1-S16
  * @param null
  * @retval null
  * 如果按下不放,程序会进入阻塞状态,松手瞬间返回按键键码
  */
  
unsigned char MatrixKey(){
	
	unsigned char KeyNumber = 0;
	P1 = 0xFF;//1111 1111
	//因为P15与蜂鸣器引脚冲突,所以使P14-P17引脚置高位,使用P10-P13进行下拉
	
	P1_3 = 0;
	if (P1_7 == 0){Delayxms(20);while(P1_7 == 0);Delayxms(20); KeyNumber = 1;}
	if (P1_6 == 0){Delayxms(20);while(P1_6 == 0);Delayxms(20); KeyNumber = 5;}
	if (P1_5 == 0){Delayxms(20);while(P1_5 == 0);Delayxms(20); KeyNumber = 9;}
	if (P1_4 == 0){Delayxms(20);while(P1_4 == 0);Delayxms(20); KeyNumber = 13;}

	P1 = 0xFF;
	P1_2 = 0;
	if (P1_7 == 0){Delayxms(20);while(P1_7 == 0);Delayxms(20); KeyNumber = 2;}
	if (P1_6 == 0){Delayxms(20);while(P1_6 == 0);Delayxms(20); KeyNumber = 6;}
	if (P1_5 == 0){Delayxms(20);while(P1_5 == 0);Delayxms(20); KeyNumber = 10;}
	if (P1_4 == 0){Delayxms(20);while(P1_4 == 0);Delayxms(20); KeyNumber = 14;}

	P1 = 0xFF;
	P1_1 = 0;
	if (P1_7 == 0){Delayxms(20);while(P1_7 == 0);Delayxms(20); KeyNumber = 3;}
	if (P1_6 == 0){Delayxms(20);while(P1_6 == 0);Delayxms(20); KeyNumber = 7;}
	if (P1_5 == 0){Delayxms(20);while(P1_5 == 0);Delayxms(20); KeyNumber = 11;}
	if (P1_4 == 0){Delayxms(20);while(P1_4 == 0);Delayxms(20); KeyNumber = 15;}

	P1 = 0xFF;
	P1_0 = 0;
	if (P1_7 == 0){Delayxms(20);while(P1_7 == 0);Delayxms(20); KeyNumber = 4;}
	if (P1_6 == 0){Delayxms(20);while(P1_6 == 0);Delayxms(20); KeyNumber = 8;}
	if (P1_5 == 0){Delayxms(20);while(P1_5 == 0);Delayxms(20); KeyNumber = 12;}
	if (P1_4 == 0){Delayxms(20);while(P1_4 == 0);Delayxms(20); KeyNumber = 16;}	
	
	 return KeyNumber;
}

